package db;

import beans.B_Amenaza;
import beans.B_Vulnerabilidad;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_VulnerabilidadAmenaza;
import conexion.Conexion;
import java.sql.Types;

/**
 *
 * @author JoseHernan
 */
public class DB_VulnerabilidadAmenaza {

    public static ArrayList<B_VulnerabilidadAmenaza> getListByIdsVulnerabilidades(String idsVulnerabilidades) {
        ArrayList<B_VulnerabilidadAmenaza> list = new ArrayList<B_VulnerabilidadAmenaza>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select va.id_vulnerabilidad, va.id_amenaza, a.descripcion as amenaza from tbl_vulnerabilidad_amenaza va left join tbl_amenaza a on a.id = va.id_amenaza where va.removed = false and a.removed = false and va.id_vulnerabilidad in (" + idsVulnerabilidades + ") order by va.id_vulnerabilidad ");
            rs = ps.executeQuery();
            B_VulnerabilidadAmenaza obj;
            B_Amenaza objAmenaza;
            B_Vulnerabilidad objVulnerabilidad;
            while (rs.next()) {
                obj = new B_VulnerabilidadAmenaza();
                //Asign values
                objAmenaza = new B_Amenaza();
                objAmenaza.setId(rs.getInt("id_amenaza"));
                objAmenaza.setDescripcion(rs.getString("amenaza"));
                obj.setObjAmenaza(objAmenaza);
                objVulnerabilidad = new B_Vulnerabilidad();
                objVulnerabilidad.setId(rs.getInt("id_vulnerabilidad"));
                obj.setObjVulnerabilidad(objVulnerabilidad);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_VulnerabilidadAmenaza> getListFilerByIdVulnerabilidad(int idVulnerabilidad) {
        ArrayList<B_VulnerabilidadAmenaza> list = new ArrayList<B_VulnerabilidadAmenaza>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select va.id, va.id_vulnerabilidad, va.id_amenaza, v.descripcion as vulnerabilidad, a.descripcion as amenaza from tbl_vulnerabilidad_amenaza va inner join tbl_vulnerabilidad v on v.id = va.id_vulnerabilidad inner join tbl_amenaza a on a.id = va.id_amenaza where va.removed = false and va.id_vulnerabilidad = " + idVulnerabilidad);
            rs = ps.executeQuery();
            B_VulnerabilidadAmenaza obj;
            B_Amenaza objAmenaza;
            B_Vulnerabilidad objVulnerabilidad;
            while (rs.next()) {
                obj = new B_VulnerabilidadAmenaza();
                //Asign values
                obj.setId(rs.getInt("id"));
                objAmenaza = new B_Amenaza();
                objAmenaza.setId(rs.getInt("id_amenaza"));
                objAmenaza.setDescripcion(rs.getString("amenaza"));
                obj.setObjAmenaza(objAmenaza);
                objVulnerabilidad = new B_Vulnerabilidad();
                objVulnerabilidad.setId(rs.getInt("id_vulnerabilidad"));
                obj.setObjVulnerabilidad(objVulnerabilidad);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    public static ArrayList<B_VulnerabilidadAmenaza> getList(int id) {
        ArrayList<B_VulnerabilidadAmenaza> list = new ArrayList<B_VulnerabilidadAmenaza>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;
            ps = con.prepareStatement(" select va.id, va.id_vulnerabilidad, va.id_amenaza, v.descripcion as vulnerabilidad, a.descripcion as amenaza from tbl_vulnerabilidad_amenaza va inner join tbl_vulnerabilidad v on v.id = va.id_vulnerabilidad inner join tbl_amenaza a on a.id = va.id_amenaza where va.removed = false and va.id = " + id);
            rs = ps.executeQuery();
            B_VulnerabilidadAmenaza obj;
            B_Amenaza objAmenaza;
            B_Vulnerabilidad objVulnerabilidad;
            while (rs.next()) {
                obj = new B_VulnerabilidadAmenaza();
                //Asign values
                obj.setId(rs.getInt("id"));
                objAmenaza = new B_Amenaza();
                objAmenaza.setId(rs.getInt("id_amenaza"));
                objAmenaza.setDescripcion(rs.getString("amenaza"));
                obj.setObjAmenaza(objAmenaza);
                objVulnerabilidad = new B_Vulnerabilidad();
                objVulnerabilidad.setId(rs.getInt("id_vulnerabilidad"));
                obj.setObjVulnerabilidad(objVulnerabilidad);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_VulnerabilidadAmenaza obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_vulnerabilidad_amenaza(?,?,?,?,?,?)}");

            cs.registerOutParameter("p_message", Types.VARCHAR);
            cs.setString("p_action", action);
            cs.setInt("p_id", obj.getId());
            cs.setInt("p_id_vulnerabilidad", obj.getObjVulnerabilidad().getId());
            cs.setInt("p_id_amenaza", obj.getObjAmenaza().getId());
            cs.setString("p_user", obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
